package com.cyys.modules.config.filter;

import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class WebFilter implements Filter {

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        //服务器响应Strict-Transport-Security 头，浏览器记录下这些信息，然后后面尝试访问这个网站的请求都会自动把HTTP替换为HTTPS。
        response.setHeader("Strict-Transport-Security", "max-age=31536; includeSubDomains");
        //referrer是HTTP请求header的报文头，用于指明当前流量的来源参考页面。通过这个信息，我们可以知道访客是怎么来到当前页面的。
        //no-referrer|no-referrer-when-downgrade|origin|origin-when-crossorigin|unsafe-url
        response.setHeader("Referrer-Policy", "no-referrer");
        //用于控制当外部资源不可信赖时不被读取。用于防止 XSS 跨站脚本攻击或数据注入攻击
        //connect-src、mainfest-src、img-src、font-src、media-src、style-src、frame-src: 已弃用。请改用 child-src。、script-src…
        //frame-ancestors: 用于指定可嵌入当前页面的来源。
//        response.setHeader("Content-Security-Policy", "child-src 'self' 'unsafe-inline' *://127.0.0.1:*");
//        response.setHeader("Content-Security-Policy", "child-src *://127.0.0.1:*");
        //用于指定当不能将"crossdomain.xml"文件（当需要从别的域名中的某个文件中读取 Flash 内容时用于进行必要设置的策略文件）放置在网站根目录等场合时采取的替代策略。
        response.addHeader("X-Permitted-Cross-Domain-Policies", "master-only");
        //用于启用浏览器的 XSS 过滤功能，以防止 XSS 跨站脚本攻击。
        response.addHeader("X-XSS-Protection", "1; mode=block");
        //用于启用浏览器的 XSS 过滤功能，以防止 XSS 跨站脚本攻击。
        response.addHeader("X-Content-Type-Options", "nosniff");
        //
        response.addHeader("X-Download-Options", "noopen");
        chain.doFilter(req, res);
    }

    public void init(FilterConfig filterConfig) {}

    public void destroy() {}
}
